package LeetCode75;

import java.util.HashMap;

/**
 * 2352. 相等行列对
 * 给你一个下标从 0 开始、大小为 n x n 的整数矩阵 grid ，返回满足 Ri 行和 Cj 列相等的行列对 (Ri, Cj) 的数目。
 *
 * 如果行和列以相同的顺序包含相同的元素（即相等的数组），则认为二者是相等的。
 *
 *
 *
 * 示例 1：
 *
 *
 *
 * 输入：grid = [[3,2,1],[1,7,6],[2,7,7]]
 * 输出：1
 * 解释：存在一对相等行列对：
 * - (第 2 行，第 1 列)：[2,7,7]
 * 示例 2：
 *
 *
 *
 * 输入：grid = [[3,1,2,2],[1,4,4,5],[2,4,2,2],[2,4,2,2]]
 * 输出：3
 * 解释：存在三对相等行列对：
 * - (第 0 行，第 0 列)：[3,1,2,2]
 * - (第 2 行, 第 2 列)：[2,4,2,2]
 * - (第 3 行, 第 2 列)：[2,4,2,2]
 *
 *
 * 提示：
 *
 * n == grid.length == grid[i].length
 * 1 <= n <= 200
 * 1 <= grid[i][j] <= 105
 */
public class T2352_相等行列对 {

    //将每行 每列提取出来 转为字符串 存入map中
    public static int equalPairs(int[][] grid) {

        HashMap<String, Integer> hashMap = new HashMap<>();

        //读取每行的数据 转为字符串 写入map中

        for (int i = 0; i < grid.length; i++) {
            StringBuilder temp = new StringBuilder();
            for (int j = 0; j < grid[i].length; j++) {
                temp.append(grid[i][j]).append(",");
            }
            //去除末尾的逗号  可以不去除
            temp.deleteCharAt(temp.length() - 1);
            //转为字符串 放入map中 value是数量
            hashMap.put(temp.toString(), hashMap.getOrDefault(temp.toString(), 0) + 1);
        }

        int length = grid.length;
        int result = 0;

        for (int j = 0; j < length; j++) {

            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < length; i++) {
                builder.append(grid[i][j]).append(",");
            }
            builder.deleteCharAt(builder.length() - 1);
            //转为字符串 查找相同的对数
            result += hashMap.getOrDefault(builder.toString(), 0);
        }

        return result;


    }

    public static void main(String[] args) {
        int i = equalPairs(new int[][]{{3, 1, 2, 2}, {1, 4, 4, 5}, {2, 4, 2, 2}, {2, 4, 2, 2}});
    }

}
